﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace devoirBD2
{
    public partial class FrmCommande : Form
    {
        private FrmListeCommandes frmListe;
        private Commande commande;
        private FournisseurTable fournisseur_table;

        public FrmCommande(FrmListeCommandes frmListe)
        {
            this.frmListe = frmListe;
            commande = new Commande();
            fournisseur_table = FournisseurTable.getInstance();
            InitializeComponent();
        }

        public FrmCommande(FrmListeCommandes frmListe, Commande commande)
        {
            this.frmListe = frmListe;
            this.commande = commande;
            fournisseur_table = FournisseurTable.getInstance();
            InitializeComponent();
        }

        private void btnRecherche_Click(object sender, EventArgs e)
        {
            FrmRechercheFournisseur frm = new FrmRechercheFournisseur(this);

            frm.ShowDialog();
        }

        private void FrmCommande_Load(object sender, EventArgs e)
        {
            if (!fournisseur_table.isLoaded())
            {
                fournisseur_table.loadFournisseur();
            }

            foreach (Fournisseur f in fournisseur_table.getFournisseurs())
            {
                cboFournisseur.Items.Add(f.ToString());
            }

            if (commande.getIdCommande() != 0)
            {
                txtID.Text = commande.getIdCommande().ToString();
                cboFournisseur.Text = commande.getNomFournisseur();
                dtpDate.Value = commande.getDateCommande();
                cboFournisseur.Enabled = false;
                btnRecherche.Enabled = false;
                remplirListe();
            }
            else
            {
                gbArticle.Enabled = false;
            }
        }

        public void remplirListe()
        {
            lstCommandeLigne.Items.Clear();
            commande.loadLignes();
            decimal montant = 0;
            foreach (CommandeLigne cmd in commande.getCommandeLignes())
            {
                montant += cmd.getMontant();
                lstCommandeLigne.Items.Add(new ListViewItem(cmd.getLigne()));
            }
            txtMontantTotal.Text = String.Format("{0:0.00}", montant) + "$";
        }

        public void selectionnerCboFournisseur(Fournisseur f)
        {
            int index = fournisseur_table.getFournisseurs().IndexOf(f);

            cboFournisseur.SelectedIndex = index;
        }

        private void btnEnregistrer_Click(object sender, EventArgs e)
        {
            if (validationCommande())
            { 
            commande.enregistrer(fournisseur_table.getFournisseurs()[cboFournisseur.SelectedIndex], dtpDate.Value);
            }
            gbArticle.Enabled = true;
            txtID.Text = commande.getIdCommande().ToString();
            frmListe.remplirListe();
        }

        private bool validationCommande()
        {
            bool valVal = true;
            errorCommande.Clear();

            if (cboFournisseur.SelectedIndex == -1)
            {
                valVal = false;
                errorCommande.SetError(cboFournisseur, "Sélectionnez un fournisseur.");
            }
            if (dtpDate.Text=="")
            {
                valVal = false;
                errorCommande.SetError(dtpDate, "Entrez une date.");
            }
            return valVal;
        }

        private void btnAjouter_Click(object sender, EventArgs e)
        {
            FrmCommandeLigne frm = new FrmCommandeLigne(this,fournisseur_table.getFournisseurs()[cboFournisseur.SelectedIndex], commande);
            frm.ShowDialog();
        }

        private void btnModifier_Click(object sender, EventArgs e)
        {
            if (lstCommandeLigne.SelectedIndices.Count > 0)
            { 
                FrmCommandeLigne frm = new FrmCommandeLigne(this,fournisseur_table.getFournisseurs()[cboFournisseur.SelectedIndex],commande, commande.getCommandeLignes()[lstCommandeLigne.SelectedIndices[0]]);
                frm.ShowDialog();
            }
            
        }

        private void btnFermer_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnSupprimer_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Êtes-vous certain de vouloir supprimer ces commandes ?", "Suppression", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                int[] indices = new int[lstCommandeLigne.SelectedIndices.Count];
                lstCommandeLigne.SelectedIndices.CopyTo(indices, 0);

                commande.deleteCommandeLigne(indices);

                remplirListe();
            }
        }
    }
}
